
        <html>
			<head>
			     <title>浅谈Elasticsearch的AAA (I) - 淡定淞淞</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/8129">http://drops.wooyun.org/tips/8129</a></h1>
				
      <p>
        <h1>0x00 前言</h1>

<hr />

<p>Elasticsearch（以下简称es）被越来越多的公司广泛使用，而其本身安全问题也备受关注，最近出现的安全问题比较多，例如影响比较大的漏洞有CVE-2014-3120和CVE-2015-1427。</p>

<p>这些漏洞和es本身没有认证授权机制有很大关系，同时公司内部多业务使用使用同一套es集群的情况非常多，如何做好认证授权的管理的问题尤为凸显。</p>

<p>官方竟然将安全模块Shield作为收费模块，所以普及率并不高。本着为公司省下仨瓜俩枣的精神寻找其他的解决方案。实现过程中走了一些弯路，记录下来以方便其他遇到这些问题的同仁。</p>

<!--more-->

<h1>0x01 需求</h1>

<hr />

<p>随着es的普及，对安全的需求越来越多，例如：</p>

<ul>
<li>账号认证，解决es匿名访问的问题。</li>
<li>授权管理，对不同的账号按照不同维度分配（主要是索引）访问权限。</li>
<li>只读权限，此条需求来源于 ：某个Dashboard想分享给其他人，但又不想让其他人有权限修改。</li>
<li>统一认证，单点登录。</li>
</ul>

<h1>0x02 方案选择</h1>

<hr />

<p>需求已确定，经过一番寻找得到以下几种方案备选。、</p>

<ul>
<li><code>elasticsearch-http-basic</code> :优点：此方案部署简单快速，可以解决从无到有的过程，实现了账号认证和ip白名单认证功能，缺点：功能单一，只解决了#1需求。</li>
<li><code>kibana-authentication-proxy</code>:优点：此方案是针对kibana实现的认证，优点是该方案支持“<code>Google OAuth2, BasicAuth(multiple users supported) and CAS Authentication</code>”解决了需求#4中的单点登录的需求，配合方案#1中的ip白名单能基本解决需求#1和#4.缺点：目前只支持到kibana3。</li>
<li><code>Shield</code> ：优点：功能强大，文档丰富。缺点：收费。</li>
<li><code>search-guard</code>：优点：功能丰富的免费模块，能够很好的解决需求中所有问题（除了#4中的单点登录）。缺点：部署和配置稍复杂，文档较少，门槛较高。</li>
</ul>

<p>大家应该能猜到最终的选择了，没错就是方案#4。</p>

<h1>0x03 安装和配置</h1>

<hr />

<h3>准备工作</h3>

<p>目前官方对es1.5和1.6支持比较好，两个版本安装方法不同，</p>

<ul>
<li><em>es 1.5</em>：</li>
</ul>

<p>直接使用插件安装 ，</p>

<pre><code> bin/plugin -i com.floragunn/search-guard/0.5
</code></pre>

<ul>
<li><em>es1.6</em>：</li>
</ul>

<p>首先需要安装maven，</p>

<pre><code>#!bash
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
</code></pre>

<p>解压后将bin目录添加到环境变量PATH中。</p>

<p>下载编译相关依赖</p>

<blockquote>
  <p>git clone -b es1.6 https://github.com/floragunncom/search-guard.git cd search-guard mvn package -DskipTests bin/plugin -u file:./target/search-guard-16-0.6-SNAPSHOT.jar -i search-guard</p>
</blockquote>

<h3>配置</h3>

<p><code>Search guard</code>配置分为2部分，一部分是<code>elasticsearch.yml</code>以及<code>logging.yml</code>文件。另一部分存储在es中。</p>

<ol>
<li><code>elasticsearch.yml</code> 主要内容包括<code>search guard</code>的一些开关，<code>ssl</code>支持的配置，认证方式，权限控制的<code>filter</code>等。 下面我们来完成一个最小化的配置： 直接将git中<code>searchguard_config_template.yml</code>内容粘贴到<code>elasticsearch.yml</code>， 然后打开</li>
</ol>

<blockquote>
  <p>searchguard.allow&#95;all&#95;from_loopback: true</p>
</blockquote>

<p>以方便本地调试。 另外需要注意的一个选项是</p>

<blockquote>
  <p>searchguard.key_path: /path/key</p>
</blockquote>

<p><code>searchguard_node.key</code>文件的路径。 默认配置已开启basic认证，</p>

<blockquote>
  <p>searchguard.authentication.authentication&#95;backend.impl: com.floragunn.searchguard.authentication.backend.simple.SettingsBasedAuthenticationBackend searchguard.authentication.authorizer.impl: com.floragunn.searchguard.authorization.simple.SettingsBasedAuthorizator searchguard.authentication.http&#95;authenticator.impl: com.floragunn.searchguard.authentication.http.basic.HTTPBasicAuthenticator</p>
</blockquote>

<p>设置用户名和密码</p>

<blockquote>
  <h1>searchguard.authentication.settingsdb.user.<username>: password searchguard.authentication.settingsdb.user.admin: adminpass searchguard.authentication.settingsdb.user.user: userpass</h1>
</blockquote>

<p>给用户分配角色，<code>admin</code>为超级管理员，角色为<code>root</code>，<code>user</code>为只读用户橘色。</p>

<blockquote>
  <h1>searchguard.authentication.authorization.settingsdb.roles.<username>: <array of roles> searchguard.authentication.authorization.settingsdb.roles.admin: ["root"] searchguard.authentication.authorization.settingsdb.roles.user: ["readonly"]</h1>
</blockquote>

<p>设置<code>filter</code>，我设置两个权限，<code>readonly</code>和<code>deny</code>权限， readonly的filter只允许读操作，以及kibana必须的两个操作，禁止写操作。</p>

<blockquote>
  <p>searchguard.actionrequestfilter.names: ["readonly","deny"] searchguard.actionrequestfilter.readonly.allowed_actions: ["indices:data/read/<em>","indices:admin/exists","indices:admin/mappings/</em>"] searchguard.actionrequestfilter.readonly.forbidden_actions: ["indices:data/write/*"]</p>
</blockquote>

<p><code>deny filter</code>禁止所有的操作。</p>

<blockquote>
  <p>searchguard.actionrequestfilter.deny.allowed&#95;actions: [] searchguard.actionrequestfilter.deny.forbidden&#95;actions: ["cluster:<em>", "indices:</em>"]</p>
</blockquote>

<p><code>logging.yml</code> 最后加入</p>

<blockquote>
  <p>logger.com.floragunn: DEBUG</p>
</blockquote>

<p>开启<code>search guard</code>的调试级别，以方便调试。 至此文件配置部分基本完成，下面设置<code>ACL</code>，将刚配置的<code>roles</code>，<code>filters</code>和<code>indices</code>关联起来。</p>

<blockquote>
  <p>curl -XPUT 'http://localhost:9200/searchguard/ac/ac?pretty' -d ' {"acl": [ { "<strong>Comment</strong>": "这条是DEFAULT规则，必须要有，默认的权限是readonly", "filters&#95;bypass": [], "filters&#95;execute": ["actionrequestfilter.readonly"] }, { "<strong>Comment</strong>": "root角色的账号可以绕过所有的filter", "roles": [ "root" ], "filters_bypass": ["<em>"], "filters_execute": [] }, { "<strong>Comment</strong>": "readonly角色对于logstash</em>的索引没有权限访问", "roles" : ["readonly"], "indices": ["logstash*"], "filters&#95;bypass": [], "filters&#95;execute": ["actionrequestfilter.deny"] }, { "<strong>Comment</strong>": "readonly角色对于logs和.kibana索引有只读的权限", "roles" : ["readonly"], "indices": ["logs",".kibana"], "filters&#95;bypass": [""], "filters&#95;execute": ["actionrequestfilter.readonly"] }</p>
  
  <p>]}'</p>
</blockquote>

<p>为了看着方便，JSON格式化后是这个样子</p>

<pre><code>{
    "acl": [
        {
            "Comment": "这条是DEFAULT规则，必须要有，默认的权限是readonly",
            "filters_bypass": [],
            "filters_execute": [
                "actionrequestfilter.readonly"
            ]
        },
        {
            "Comment": "root角色的账号可以绕过所有的filter",
            "roles": [
                "root"
            ],
            "filters_bypass": [
                ""
            ],
            "filters_execute": []
        },
        {
            "Comment": "readonly角色对于logstash的索引没有权限访问",
            "roles": [
                "readonly"
            ],
            "indices": [
                "logstash*"
            ],
            "filters_bypass": [],
            "filters_execute": [
                "actionrequestfilter.deny"
            ]
        },
        {
            "Comment": "readonly角色对于logs和.kibana索引有只读的权限",
            "roles": [
                "readonly"
            ],
            "indices": [
                "logs",
                ".kibana"
            ],
            "filters_bypass": [
                ""
            ],
            "filters_execute": [
                "actionrequestfilter.readonly"
            ]
        }
    ]
}
</code></pre>

<p>这样我就做到了关键数据索引<code>logstash*</code>只允许<code>admin</code>用户访问，而<code>user</code>账号可以对<code>logs</code>和<code>kibana</code>进行只读操作，大家可以自行测试。 这里顺便解决了<code>kibana</code>本身没有权限控制的问题，对于<code>dashborad</code>展示分享给<code>user</code>用户，也不用担心他们会对图标设置进行误操作而影响其他用户使用。</p>

<h1>0x04 总结</h1>

<hr />

<p>其实<code>search guard</code>的功能远不止以上介绍的这些，例如细化到字段或者文档级别的ACL；节点之间通过SSL同步数据；使用ladp或者AD账号进行验证等功能希望后续能给大家带来介绍。</p>

<p>愿本文能起到抛砖引玉的效果。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          